网站导航:首页开源项目 USB开源项目:Easy USB 51 Programer  

目录导航

   
  1、项目简介
USB开发基础
1、USB接口的优点及开发难易度
2、USB设备的开发流程
3、USB接口芯片(USB控制器)的选择
4、了解USB的通讯过程
5、USB命令(请求)和USB描述符
6、实例讲解USB的枚举(配置)过程
准备工作
1、需要哪些工具
2、电路原理图
3、手工制作您的电路板
4、测试您的硬件
HID设备类
1、让PC机找到我们的硬件
2、如何成为一个HID设备(模拟鼠标)
3、如何成为一个HID设备(模拟键盘)
4、如何与HID设备通讯(一)
5、如何与HID设备通讯(二)
6、51编程器的实现
Windows USB 驱动程序(自定义设备)
1、Windows驱动开发基础
2、开发环境配置
3、第一个实例-Hello Wdm(一)
4、第一个实例-Hello Wdm(二)
5、真正的实例—驱动我们的实验板
6、真正的实例—测试驱动程序
7、真正的实例—控制LED及读取按键状态
8、如何编写应用程序
   

相关产品    淘宝网店
     
 

 
  更多...  
 
 
如何与HID设备通讯(一) 查看/参与此开源项目相关讨论
 

  说明:本实例所使用的上位机程序开发工具为Visual C++6.0。

一、修改下位机固件程序

  我们如果想实现一个USB的HID类设备,不需要在Windows下开发自己的驱动程序。HID不一定要是标准的外设类型,唯一的要求是交换的数据存储在报文的结构内,设备固件必须支持报文的格式。任何工作在该限制之内的设备都可以成为一个HID,例如温度计、电压计、读卡机等。

  报文的格式是由报告描述符决定的,所以只要修改描述符就能实现我们需要的报文格式。下面我们来实现一个简单的报文格式:上位机发送固定64字节数据给设备,这个数据可以是命令,也可是数据,具体含义并不是由报告描述符来决定的,是由开发人员事先约定好的。设备返回的数据也是64个字节,同样这个数据流的每个字节(甚至每个位)的具体含义由开发人员事先约定好。

1、修改报告描述符

A、在Descriptor.C中找到以MouseReportDescriptor函数,将其内容修改如下:

 
  1. code char MouseReportDescriptor[29] = {   
  2.     0x06,0x00,0xFF,             //USAGE_PAGE (Vendor Defined Page 1)    
  3.     0x09,0x01,              //USAGE (Vendor Usage 1)    
  4.     0xA1,0x01,              //COLLECTION (Application)    
  5.   
  6.     0x19,0x01,              //(Vendor Usage 1)    
  7.     0x29,0x08,              //(Vendor Usage 1)    
  8.     0x15,0x00,              //LOGICAL_MINIMUM (0)    
  9.     0x26,0xFF,0x00,             //LOGICAL_MAXIMUM (255)    
  10.     0x75,0x08,              //REPORT_SIZE (8)    
  11.     0x95,0x40,              //REPORT_COUNT (64)    
  12.     0x81,0x02,              //INPUT (Data,Var,Abs)    
  13.   
  14.     0x19,0x01,              //(Vendor Usage 1)    
  15.     0x29,0x08,              //(Vendor Usage 1)    
  16.     0x91,0x02,              //OUTPUT (Data,Var,Abs)    
  17.   
  18.     0xC0                    // END_COLLECTION   
  19. };  

  此报告描述符定义了64个字节的输入输出数据。

B、将Descriptor.C中的如下代码

 
  1. 0x66,0x03,                      //设备制造商定的产品ID  

修改为

 
  1. 0x66,0x06,                      //设备制造商定的产品ID  

 

C、在Descriptor.h中,将以下代码

 
  1. extern code char MouseReportDescriptor[52];  

修改为

 
  1. extern code char MouseReportDescriptor[29];  

D、在Main.C中找到以下代码

 
  1. if(bEPPflags.bits.configuration)   
  2. {   
  3.     //在这里添加端点操作代码   
  4.       
  5. }  

将其修改为

 
  1. if(bEPPflags.bits.configuration)       
  2. {       
  3.     //在这里添加端点操作代码       
  4.         
  5.     if(bEPPflags.bits.ep2_rxdone )  //主端点接收到数据(从主机发往设备的数据)       
  6.     {       
  7.         bEPPflags.bits.ep2_rxdone       = 0;           
  8.            
  9.         D12_WriteEndpoint(5,EP2_PACKET_SIZE,EpBuf);    //立即将收到的64个字节发送到PC机       
  10.     }        
  11. }   

这一步的作用是立即将接到的数据返回给主机。函数D12_WriteEndpoint的定义位于D12CI.C中。

点击这里下载已修改好的源代码

2、测试

  我们可以利用一些USB调试软件在自己没有编写上位机程序的情况下先进行一些测试。这里我们要用到的工具是BUS HOUND

A、首先将第1步修改好的程序烧录到主控芯片中并将硬件插入电脑,然后打开BUS HOUND,点“Settings”按钮切换到设置页,将“Max Phase”的值设为64并点“Apply”按钮,这样BUS HOUND才能监控最多64个字节的数据流。 

B、点“Devices”按钮切换到Devices页,选定我们刚插入的硬件(一定要选紧临“USB Root Hub”的下一级设备)。

C、点“Send Commands”按钮,出现如下画面

D、选中“Endpoint”为2,“Direction”为Out的那项,“Data Length”填64,发送的数据随便填上一些数据,最后点击“Run”按钮

E、切换到BUS HOUND主界面,点“Capture”按钮切换到监控页面,如下图所示,BUS HOUND捕捉到了一些数据。其中“Phase”列中的“DO”代表主机发往设备的数据,而“DI”代表设备发往主机的数据。我们看到设备返回的数据正好和主机发送的数据一样,证明我们的下位机程序已经修改成功。

 

 
 
 
本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4